package com.jsn.responseEntity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.HashMap;

//统一返回结果的类
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor

public class R<T> implements Response, Serializable {

	private Boolean success = SUCCESS;

	private Integer code = SUCCESS_CODE;

	private String message = MESSAGE;

	private T data;

	//把构造方法私有
	private R() {
	}

	//成功静态方法
	public static R ok() {
		R r = new R();
		r.setSuccess(true);
		r.setCode(20000);
		r.setData("");
		r.setMessage("成功");
		return r;
	}

	//失败静态方法
	public static R error() {
		R r = new R();
		r.setSuccess(false);
		r.setCode(20001);
		r.setMessage("失败");
		return r;
	}

	public R success(Boolean success) {
		this.setSuccess(success);
		return this;
	}

	public R message(String message) {
		this.setMessage(message);
		return this;
	}

	public R code(Integer code) {
		this.setCode(code);
		return this;
	}


	public static <T> R<T> ok(T data) {
		R<T> build = (R<T>) R.builder()
				.data(data)
				.code(SUCCESS_CODE)
				.message(MESSAGE)
				.success(SUCCESS)
				.build();
		return build;
	}


	public static R error(CommonCode commonCode) {
		return R.builder()
				.success(commonCode.success)
				.message(commonCode.message)
				.code(commonCode.code)
				.data(new HashMap<>())
				.build();
	}



/*

    public R data(String key, Object value){
        this.data.put(key, value);
        return this;
    }

    public R data(Map<String, Object> map){
        this.setData(map);
        return this;
    }
*/


}
